1. Field of the Invention
The present invention relates to computer software, and deals more particularly with methods, systems, computer program products, and methods of doing business by caching content fragments in a distributed cache and assembling content using these fragments.
2. Description of the Related Art
The popularity of distributed computing networks and distributed computing (sometimes referred to as “network computing”) has increased tremendously in recent years, due in large part to growing business and consumer use of the public Internet and the subset thereof known as the “World Wide Web” (or simply “Web”). Other types of distributed computing networks, such as corporate intranets and extranets, are also increasingly popular. As solutions providers focus on delivering improved Web-based computing, many of the solutions which are developed are adaptable to other distributed computing environments. Thus, references herein to the Internet and Web are for purposes of illustration and not of limitation.
The early Internet served primarily as a distributed file system in which users could request delivery of already-generated static documents. In recent years, the trend has been to add more and more dynamic and personalized aspects into the content that is served to requesters. Many dynamically-generated documents also include static content, such as forms, graphic images, sound files, and other types of embedded objects. (References herein to already-generated static content are intended to refer equivalently to static content which is incorporated into dynamically-generated documents or other types of dynamically-generated content.)
The number of objects involved in servicing a content request may range from a single stored object to a relatively large number of objects (often, on the order of tens of objects). (The terms “stored object” and “object” are used interchangeably herein to refer to an object or file which is stored on a storage medium—or which may, in some cases, be distributed across more than one storage medium. It should be noted that references herein to objects are not to be construed as limiting the present invention to the field of object-oriented programming. Furthermore, the terms “content” and “document content” as used herein are intended to be synonymous with one or more objects or files unless the reference context indicates otherwise.)
While some content requests are generated programmatically, many content requests have a human user waiting for a response. Returning responses quickly and efficiently can therefore be critical to user satisfaction and to the overall success of an enterprise's Web presence or other distributed computing endeavor. An additional concern in a distributed computing environment is the processing load on the computing resources, and particularly those resources at the back end (i.e., server side) of the network. If a bottleneck occurs, overall system throughput may be seriously degraded. To address this situation, the content supplier may have to purchase additional servers, which increases the cost of doing business.
One technique which has been developed to address these problems is the use of content caching systems, which are sometimes referred to as “Web caches”, “cache servers”, or “content caches”. The goals of a caching system are to store or “cache” content at a location (or at multiple locations) in the computing network from which the content can be returned to the requester more quickly, and to thereby also reduce the processing burden on the back-end systems by serving some requests without routing them to the back-end. Two basic approaches to caching systems are commonly in use. These are called proxies, also known as “forward proxies”, surrogates, also known as “reverse proxies”. The concepts of content caching, using proxies and surrogates, is well known in the art and will not be described in detail herein.
While caching offers significant advantages within distributed computing environments by reducing the number of requests that reach Web application servers, thereby improving response time and reducing processing load, in many cases, there is room for improvement. For example, there might be dynamically-generated elements in the content that effectively prevents this content from being served from cache. In a traditional caching system, for example, including any type of user-specific information or personalization of some sort in the content typically prevents this content from being reused. (Hereinafter, references to “dynamic content” are intended to include personalized content unless the reference context indicates otherwise.) When content cannot be served from cache, the content requests come to a Web application server. Thus, serving dynamic content has traditionally resulted in increased response time to the requester as well as increased processing burden on the back-end resources.
The concept of “distributed fragment caching” and assembly of these distributed fragments is a relatively new technology, designed to extend the well-known benefits of caching into the dynamic content arena. In general, distributed fragment caching and assembly technology is based on describing Web documents as compositions of smaller fragments. “Fragmentation” of personalized Web documents and documents with dynamic content has the potential to move (at least part of) the document-building workload from the origin server to another location, such as a surrogate or proxy. (In the general case, the caching and assembly of fragments may be done at any location between a client, such as a browser, and the origin application server, inclusive. The term “fragment cache/assembler” or “caching system” will be used hereinafter to refer to the location where fragment caching and assembly is performed, irrespective of how that function may be implemented.) Edge Side Includes (“ESI”) is an example of a published specification of this type of fragment technology. Refer to Internet location http://www.esi.org (hereinafter, “the ESI Web site”) for more information on ESI.
Software infrastructure is available for distributed fragment caching and assembly. Vendors that support ESI, for example, include Oracle and Akamai. A number of other vendors have expressed support for the ESI initiative. However, exploitation of this software infrastructure is dependent on applications' architectures. Architectures for fragment exploitation are fundamentally different from state-of-the-art “best practices”, which typically use a page-level model-view-controller (“MVC”) paradigm. Therefore, many existing applications have not been able to leverage the advantages of fragment technology using ESI. As is well known in the art, modifying existing applications can be an extremely costly, complex, and time-consuming process, and when the underlying architecture is not well-aligned, these disadvantages are magnified to such an extent that it is unfeasible to retrofit existing applications to leverage the new technology.
Accordingly, what is needed is a way for enabling existing applications to exploit, without internal modification, distributed fragment caching and assembly.